/*******************************************************************************
 * Copyright (c) 2022 BestSolution.at and others.
 *  
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v.2.0 which is available at
 * https://www.eclipse.org/legal/epl-2.0.
 *  
 * SPDX-License-Identifier: EPL-2.0
 *  
 * Contributors:
 *     BestSolution.at - initial API and implementation
 *******************************************************************************/
/*
 * generated by Xtext
 */
package org.eclipse.fx.ide.css.cssext.parseTreeConstruction;

import org.eclipse.emf.ecore.*;
import org.eclipse.xtext.*;
import org.eclipse.xtext.parsetree.reconstr.IEObjectConsumer;

import org.eclipse.fx.ide.css.cssext.services.CssExtDslGrammarAccess;

import com.google.inject.Inject;

@SuppressWarnings("all")
public class CssExtDslParsetreeConstructor extends org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor {
		
	@Inject
	private CssExtDslGrammarAccess grammarAccess;
	
	@Override
	protected AbstractToken getRootToken(IEObjectConsumer inst) {
		return new ThisRootNode(inst);	
	}
	
protected class ThisRootNode extends RootToken {
	public ThisRootNode(IEObjectConsumer inst) {
		super(inst);
	}
	
	@Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CssExtension_Group(this, this, 0, inst);
			case 1: return new Import_Group(this, this, 1, inst);
			case 2: return new PackageDefinition_Group(this, this, 2, inst);
			case 3: return new Doku_ContentAssignment(this, this, 3, inst);
			case 4: return new CSSBaseType_CSSTypeParserRuleCall(this, this, 4, inst);
			case 5: return new CSSType_Alternatives(this, this, 5, inst);
			case 6: return new ElementDefinition_Group(this, this, 6, inst);
			case 7: return new PropertyDefinition_Group(this, this, 7, inst);
			case 8: return new PseudoClassDefinition_Group(this, this, 8, inst);
			case 9: return new CSSRuleRef_Group(this, this, 9, inst);
			case 10: return new CSSRuleDefinition_Group(this, this, 10, inst);
			case 11: return new CSSRuleFunc_Group(this, this, 11, inst);
			case 12: return new CSSRuleOr_Group(this, this, 12, inst);
			case 13: return new CSSRuleXor_Group(this, this, 13, inst);
			case 14: return new CSSRuleConcat_Group(this, this, 14, inst);
			case 15: return new CSSRuleConcatWithoutSpace_Group(this, this, 15, inst);
			case 16: return new CSSRulePostfix_Group(this, this, 16, inst);
			case 17: return new CSSRuleBracket_Group(this, this, 17, inst);
			case 18: return new CSSRulePrimary_Alternatives(this, this, 18, inst);
			case 19: return new CSSRuleRegex_Group(this, this, 19, inst);
			case 20: return new CSSRuleLiteral_Group(this, this, 20, inst);
			case 21: return new CSSRuleSymbol_Group(this, this, 21, inst);
			case 22: return new CSSDefaultValue_Alternatives(this, this, 22, inst);
			case 23: return new SubstructureSelector_Group(this, this, 23, inst);
			case 24: return new Substructure_Group(this, this, 24, inst);
			case 25: return new SubstructureStyleclass_Group(this, this, 25, inst);
			default: return null;
		}	
	}	
}
	

/************ begin Rule CssExtension ****************
 *
 * CssExtension:
 * 	imports+=Import*
 * 	packageDef=PackageDefinition?
 * 	//	packageDef=PackageDefinition?
 * 	//	rule=CSSRuleSet
 * ;
 *
 **/

// imports+=Import* packageDef=PackageDefinition?
protected class CssExtension_Group extends GroupToken {
	
	public CssExtension_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCssExtensionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CssExtension_PackageDefAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CssExtension_ImportsAssignment_0(lastRuleCallOrigin, this, 1, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 2, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCssExtensionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// imports+=Import*
protected class CssExtension_ImportsAssignment_0 extends AssignmentToken  {
	
	public CssExtension_ImportsAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCssExtensionAccess().getImportsAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("imports",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("imports");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getImportRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCssExtensionAccess().getImportsImportParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CssExtension_ImportsAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index - 1, consumed);
		}	
	}	
}

// packageDef=PackageDefinition?
protected class CssExtension_PackageDefAssignment_1 extends AssignmentToken  {
	
	public CssExtension_PackageDefAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCssExtensionAccess().getPackageDefAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("packageDef",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("packageDef");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPackageDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCssExtensionAccess().getPackageDefPackageDefinitionParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CssExtension_ImportsAssignment_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index - 1, consumed);
		}	
	}	
}


/************ end Rule CssExtension ****************/


/************ begin Rule Import ****************
 *
 * Import:
 * 	'import' importedNamespace=QualifiedNameWithWildCard;
 *
 **/

// 'import' importedNamespace=QualifiedNameWithWildCard
protected class Import_Group extends GroupToken {
	
	public Import_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getImportAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_ImportedNamespaceAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getImportRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// 'import'
protected class Import_ImportKeyword_0 extends KeywordToken  {
	
	public Import_ImportKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getImportAccess().getImportKeyword_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

}

// importedNamespace=QualifiedNameWithWildCard
protected class Import_ImportedNamespaceAssignment_1 extends AssignmentToken  {
	
	public Import_ImportedNamespaceAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getImportAccess().getImportedNamespaceAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Import_ImportKeyword_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("importedNamespace",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("importedNamespace");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getImportAccess().getImportedNamespaceQualifiedNameWithWildCardParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getImportAccess().getImportedNamespaceQualifiedNameWithWildCardParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule Import ****************/





/************ begin Rule PackageDefinition ****************
 *
 * PackageDefinition:
 * 	(doku=Doku WS*)?
 * 	'package' name=QualifiedName
 * 	'{' (rules+=CSSRuleDefinition | subpackages+=PackageDefinition | elements+=ElementDefinition)*
 * 	'}';
 *
 **/

// (doku=Doku WS*)? 'package' name=QualifiedName '{' (rules+=CSSRuleDefinition | subpackages+=PackageDefinition |
// elements+=ElementDefinition)* '}'
protected class PackageDefinition_Group extends GroupToken {
	
	public PackageDefinition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPackageDefinitionRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// (doku=Doku WS*)?
protected class PackageDefinition_Group_0 extends GroupToken {
	
	public PackageDefinition_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_DokuAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class PackageDefinition_DokuAssignment_0_0 extends AssignmentToken  {
	
	public PackageDefinition_DokuAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getDokuAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageDefinitionAccess().getDokuDokuParserRuleCall_0_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}


// 'package'
protected class PackageDefinition_PackageKeyword_1 extends KeywordToken  {
	
	public PackageDefinition_PackageKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getPackageKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_Group_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// name=QualifiedName
protected class PackageDefinition_NameAssignment_2 extends AssignmentToken  {
	
	public PackageDefinition_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_PackageKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPackageDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPackageDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// '{'
protected class PackageDefinition_LeftCurlyBracketKeyword_3 extends KeywordToken  {
	
	public PackageDefinition_LeftCurlyBracketKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getLeftCurlyBracketKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// (rules+=CSSRuleDefinition | subpackages+=PackageDefinition | elements+=ElementDefinition)*
protected class PackageDefinition_Alternatives_4 extends AlternativesToken {

	public PackageDefinition_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_RulesAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageDefinition_SubpackagesAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new PackageDefinition_ElementsAssignment_4_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// rules+=CSSRuleDefinition
protected class PackageDefinition_RulesAssignment_4_0 extends AssignmentToken  {
	
	public PackageDefinition_RulesAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getRulesAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rules",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rules");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageDefinitionAccess().getRulesCSSRuleDefinitionParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageDefinition_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new PackageDefinition_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// subpackages+=PackageDefinition
protected class PackageDefinition_SubpackagesAssignment_4_1 extends AssignmentToken  {
	
	public PackageDefinition_SubpackagesAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getSubpackagesAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("subpackages",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("subpackages");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPackageDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageDefinitionAccess().getSubpackagesPackageDefinitionParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageDefinition_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new PackageDefinition_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// elements+=ElementDefinition
protected class PackageDefinition_ElementsAssignment_4_2 extends AssignmentToken  {
	
	public PackageDefinition_ElementsAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getElementsAssignment_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("elements",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("elements");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getElementDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPackageDefinitionAccess().getElementsElementDefinitionParserRuleCall_4_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PackageDefinition_Alternatives_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new PackageDefinition_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// '}'
protected class PackageDefinition_RightCurlyBracketKeyword_5 extends KeywordToken  {
	
	public PackageDefinition_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPackageDefinitionAccess().getRightCurlyBracketKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PackageDefinition_Alternatives_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PackageDefinition_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule PackageDefinition ****************/


/************ begin Rule Doku ****************
 *
 * Doku:
 * 	content=JDOC;
 *
 **/

// content=JDOC
protected class Doku_ContentAssignment extends AssignmentToken  {
	
	public Doku_ContentAssignment(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getDokuAccess().getContentAssignment();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getDokuRule().getType().getClassifier())
			return null;
		if((value = eObjectConsumer.getConsumable("content",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("content");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getDokuAccess().getContentJDOCTerminalRuleCall_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getDokuAccess().getContentJDOCTerminalRuleCall_0();
			return obj;
		}
		return null;
	}

}

/************ end Rule Doku ****************/


/************ begin Rule CSSBaseType ****************
 *
 * CSSBaseType CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	CSSType;
 *
 **/

// CSSType
protected class CSSBaseType_CSSTypeParserRuleCall extends RuleCallToken {
	
	public CSSBaseType_CSSTypeParserRuleCall(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSBaseTypeAccess().getCSSTypeParserRuleCall();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSType_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

/************ end Rule CSSBaseType ****************/


/************ begin Rule CSSType ****************
 *
 * CSSType hidden(SL_COMMENT, ML_COMMENT):
 * 	{CSSRangedIntType} (doku=Doku WS*)? type='@INT' '(' WS* from=INT WS* '->' WS* to=INT WS* ')' | {CSSRangedDoubleType}
 * 	(doku=Doku WS*)? type='@NUM' '(' WS* from=DOUBLE WS* '->' WS* to=DOUBLE WS* ')' | (doku=Doku WS*)? (type='@INT' WS* |
 * 	type='@NUM' WS* | type='@STRING' WS* | type='@URL' WS*);
 *
 **/

// {CSSRangedIntType} (doku=Doku WS*)? type='@INT' '(' WS* from=INT WS* '->' WS* to=INT WS* ')' | {CSSRangedDoubleType}
// (doku=Doku WS*)? type='@NUM' '(' WS* from=DOUBLE WS* '->' WS* to=DOUBLE WS* ')' | (doku=Doku WS*)? (type='@INT' WS* |
// type='@NUM' WS* | type='@STRING' WS* | type='@URL' WS*)
protected class CSSType_Alternatives extends AlternativesToken {

	public CSSType_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSType_Group_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CSSType_Group_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRangedIntType} (doku=Doku WS*)? type='@INT' '(' WS* from=INT WS* '->' WS* to=INT WS* ')'
protected class CSSType_Group_0 extends GroupToken {
	
	public CSSType_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_RightParenthesisKeyword_0_11(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRangedIntType}
protected class CSSType_CSSRangedIntTypeAction_0_0 extends ActionToken  {

	public CSSType_CSSRangedIntTypeAction_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (doku=Doku WS*)?
protected class CSSType_Group_0_1 extends GroupToken {
	
	public CSSType_Group_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_DokuAssignment_0_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class CSSType_DokuAssignment_0_1_0 extends AssignmentToken  {
	
	public CSSType_DokuAssignment_0_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getDokuAssignment_0_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSTypeAccess().getDokuDokuParserRuleCall_0_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSType_CSSRangedIntTypeAction_0_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// type='@INT'
protected class CSSType_TypeAssignment_0_2 extends AssignmentToken  {
	
	public CSSType_TypeAssignment_0_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getTypeAssignment_0_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_0_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSType_CSSRangedIntTypeAction_0_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getTypeINTKeyword_0_2_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSTypeAccess().getTypeINTKeyword_0_2_0();
			return obj;
		}
		return null;
	}

}

// '('
protected class CSSType_LeftParenthesisKeyword_0_3 extends KeywordToken  {
	
	public CSSType_LeftParenthesisKeyword_0_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getLeftParenthesisKeyword_0_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_TypeAssignment_0_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// from=INT
protected class CSSType_FromAssignment_0_5 extends AssignmentToken  {
	
	public CSSType_FromAssignment_0_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getFromAssignment_0_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_LeftParenthesisKeyword_0_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getFromINTTerminalRuleCall_0_5_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSTypeAccess().getFromINTTerminalRuleCall_0_5_0();
			return obj;
		}
		return null;
	}

}

// '->'
protected class CSSType_HyphenMinusGreaterThanSignKeyword_0_7 extends KeywordToken  {
	
	public CSSType_HyphenMinusGreaterThanSignKeyword_0_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getHyphenMinusGreaterThanSignKeyword_0_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_FromAssignment_0_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// to=INT
protected class CSSType_ToAssignment_0_9 extends AssignmentToken  {
	
	public CSSType_ToAssignment_0_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getToAssignment_0_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_HyphenMinusGreaterThanSignKeyword_0_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("to",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("to");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getToINTTerminalRuleCall_0_9_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSTypeAccess().getToINTTerminalRuleCall_0_9_0();
			return obj;
		}
		return null;
	}

}

// ')'
protected class CSSType_RightParenthesisKeyword_0_11 extends KeywordToken  {
	
	public CSSType_RightParenthesisKeyword_0_11(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getRightParenthesisKeyword_0_11();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_ToAssignment_0_9(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// {CSSRangedDoubleType} (doku=Doku WS*)? type='@NUM' '(' WS* from=DOUBLE WS* '->' WS* to=DOUBLE WS* ')'
protected class CSSType_Group_1 extends GroupToken {
	
	public CSSType_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_RightParenthesisKeyword_1_11(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRangedDoubleType}
protected class CSSType_CSSRangedDoubleTypeAction_1_0 extends ActionToken  {

	public CSSType_CSSRangedDoubleTypeAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (doku=Doku WS*)?
protected class CSSType_Group_1_1 extends GroupToken {
	
	public CSSType_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_DokuAssignment_1_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class CSSType_DokuAssignment_1_1_0 extends AssignmentToken  {
	
	public CSSType_DokuAssignment_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getDokuAssignment_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSTypeAccess().getDokuDokuParserRuleCall_1_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSType_CSSRangedDoubleTypeAction_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// type='@NUM'
protected class CSSType_TypeAssignment_1_2 extends AssignmentToken  {
	
	public CSSType_TypeAssignment_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getTypeAssignment_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSType_CSSRangedDoubleTypeAction_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getTypeNUMKeyword_1_2_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSTypeAccess().getTypeNUMKeyword_1_2_0();
			return obj;
		}
		return null;
	}

}

// '('
protected class CSSType_LeftParenthesisKeyword_1_3 extends KeywordToken  {
	
	public CSSType_LeftParenthesisKeyword_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getLeftParenthesisKeyword_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_TypeAssignment_1_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// from=DOUBLE
protected class CSSType_FromAssignment_1_5 extends AssignmentToken  {
	
	public CSSType_FromAssignment_1_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getFromAssignment_1_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_LeftParenthesisKeyword_1_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("from",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("from");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getFromDOUBLETerminalRuleCall_1_5_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSTypeAccess().getFromDOUBLETerminalRuleCall_1_5_0();
			return obj;
		}
		return null;
	}

}

// '->'
protected class CSSType_HyphenMinusGreaterThanSignKeyword_1_7 extends KeywordToken  {
	
	public CSSType_HyphenMinusGreaterThanSignKeyword_1_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getHyphenMinusGreaterThanSignKeyword_1_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_FromAssignment_1_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// to=DOUBLE
protected class CSSType_ToAssignment_1_9 extends AssignmentToken  {
	
	public CSSType_ToAssignment_1_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getToAssignment_1_9();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_HyphenMinusGreaterThanSignKeyword_1_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("to",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("to");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getToDOUBLETerminalRuleCall_1_9_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSTypeAccess().getToDOUBLETerminalRuleCall_1_9_0();
			return obj;
		}
		return null;
	}

}

// ')'
protected class CSSType_RightParenthesisKeyword_1_11 extends KeywordToken  {
	
	public CSSType_RightParenthesisKeyword_1_11(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getRightParenthesisKeyword_1_11();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_ToAssignment_1_9(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


// (doku=Doku WS*)? (type='@INT' WS* | type='@NUM' WS* | type='@STRING' WS* | type='@URL' WS*)
protected class CSSType_Group_2 extends GroupToken {
	
	public CSSType_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Alternatives_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// (doku=Doku WS*)?
protected class CSSType_Group_2_0 extends GroupToken {
	
	public CSSType_Group_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_DokuAssignment_2_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class CSSType_DokuAssignment_2_0_0 extends AssignmentToken  {
	
	public CSSType_DokuAssignment_2_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getDokuAssignment_2_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSTypeAccess().getDokuDokuParserRuleCall_2_0_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}


// type='@INT' WS* | type='@NUM' WS* | type='@STRING' WS* | type='@URL' WS*
protected class CSSType_Alternatives_2_1 extends AlternativesToken {

	public CSSType_Alternatives_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getAlternatives_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_2_1_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSType_Group_2_1_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CSSType_Group_2_1_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new CSSType_Group_2_1_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

}

// type='@INT' WS*
protected class CSSType_Group_2_1_0 extends GroupToken {
	
	public CSSType_Group_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_2_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_TypeAssignment_2_1_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// type='@INT'
protected class CSSType_TypeAssignment_2_1_0_0 extends AssignmentToken  {
	
	public CSSType_TypeAssignment_2_1_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getTypeAssignment_2_1_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getTypeINTKeyword_2_1_0_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSTypeAccess().getTypeINTKeyword_2_1_0_0_0();
			return obj;
		}
		return null;
	}

}


// type='@NUM' WS*
protected class CSSType_Group_2_1_1 extends GroupToken {
	
	public CSSType_Group_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_2_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_TypeAssignment_2_1_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// type='@NUM'
protected class CSSType_TypeAssignment_2_1_1_0 extends AssignmentToken  {
	
	public CSSType_TypeAssignment_2_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getTypeAssignment_2_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getTypeNUMKeyword_2_1_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSTypeAccess().getTypeNUMKeyword_2_1_1_0_0();
			return obj;
		}
		return null;
	}

}


// type='@STRING' WS*
protected class CSSType_Group_2_1_2 extends GroupToken {
	
	public CSSType_Group_2_1_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_2_1_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_TypeAssignment_2_1_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// type='@STRING'
protected class CSSType_TypeAssignment_2_1_2_0 extends AssignmentToken  {
	
	public CSSType_TypeAssignment_2_1_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getTypeAssignment_2_1_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getTypeSTRINGKeyword_2_1_2_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSTypeAccess().getTypeSTRINGKeyword_2_1_2_0_0();
			return obj;
		}
		return null;
	}

}


// type='@URL' WS*
protected class CSSType_Group_2_1_3 extends GroupToken {
	
	public CSSType_Group_2_1_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getGroup_2_1_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_TypeAssignment_2_1_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// type='@URL'
protected class CSSType_TypeAssignment_2_1_3_0 extends AssignmentToken  {
	
	public CSSType_TypeAssignment_2_1_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSTypeAccess().getTypeAssignment_2_1_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSType_Group_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSTypeAccess().getTypeURLKeyword_2_1_3_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSTypeAccess().getTypeURLKeyword_2_1_3_0_0();
			return obj;
		}
		return null;
	}

}





/************ end Rule CSSType ****************/


/************ begin Rule ElementDefinition ****************
 *
 * //CSSRangedType returns CSSRule hidden(SL_COMMENT, ML_COMMENT):
 * //	
 * //;
 * ElementDefinition:
 * 	{ElementDefinition} doku=Doku?
 * 	name=QualifiedName ('extends' super+=[ElementDefinition|QualifiedName] (','
 * 	super+=[ElementDefinition|QualifiedName])*)? ('styleclass' styleclass=ID)?
 * 	'{' (properties+=PropertyDefinition | pseudoClasses+=PseudoClassDefinition | substructures+=Substructure)*
 * 	'}';
 *
 **/

// {ElementDefinition} doku=Doku? name=QualifiedName ('extends' super+=[ElementDefinition|QualifiedName] (','
// super+=[ElementDefinition|QualifiedName])*)? ('styleclass' styleclass=ID)? '{' (properties+=PropertyDefinition |
// pseudoClasses+=PseudoClassDefinition | substructures+=Substructure)* '}'
protected class ElementDefinition_Group extends GroupToken {
	
	public ElementDefinition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_RightCurlyBracketKeyword_7(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getElementDefinitionAccess().getElementDefinitionAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {ElementDefinition}
protected class ElementDefinition_ElementDefinitionAction_0 extends ActionToken  {

	public ElementDefinition_ElementDefinitionAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getElementDefinitionAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// doku=Doku?
protected class ElementDefinition_DokuAssignment_1 extends AssignmentToken  {
	
	public ElementDefinition_DokuAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getDokuAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getElementDefinitionAccess().getDokuDokuParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ElementDefinition_ElementDefinitionAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// name=QualifiedName
protected class ElementDefinition_NameAssignment_2 extends AssignmentToken  {
	
	public ElementDefinition_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_DokuAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_ElementDefinitionAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getElementDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getElementDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// ('extends' super+=[ElementDefinition|QualifiedName] (',' super+=[ElementDefinition|QualifiedName])*)?
protected class ElementDefinition_Group_3 extends GroupToken {
	
	public ElementDefinition_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getGroup_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_SuperAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// 'extends'
protected class ElementDefinition_ExtendsKeyword_3_0 extends KeywordToken  {
	
	public ElementDefinition_ExtendsKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getExtendsKeyword_3_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// super+=[ElementDefinition|QualifiedName]
protected class ElementDefinition_SuperAssignment_3_1 extends AssignmentToken  {
	
	public ElementDefinition_SuperAssignment_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getSuperAssignment_3_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_ExtendsKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("super",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("super");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getElementDefinitionAccess().getSuperElementDefinitionCrossReference_3_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getElementDefinitionAccess().getSuperElementDefinitionCrossReference_3_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// (',' super+=[ElementDefinition|QualifiedName])*
protected class ElementDefinition_Group_3_2 extends GroupToken {
	
	public ElementDefinition_Group_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getGroup_3_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_SuperAssignment_3_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// ','
protected class ElementDefinition_CommaKeyword_3_2_0 extends KeywordToken  {
	
	public ElementDefinition_CommaKeyword_3_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getCommaKeyword_3_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_Group_3_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_SuperAssignment_3_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// super+=[ElementDefinition|QualifiedName]
protected class ElementDefinition_SuperAssignment_3_2_1 extends AssignmentToken  {
	
	public ElementDefinition_SuperAssignment_3_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getSuperAssignment_3_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_CommaKeyword_3_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("super",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("super");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getElementDefinitionAccess().getSuperElementDefinitionCrossReference_3_2_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getElementDefinitionAccess().getSuperElementDefinitionCrossReference_3_2_1_0(); 
				return obj;
			}
		}
		return null;
	}

}



// ('styleclass' styleclass=ID)?
protected class ElementDefinition_Group_4 extends GroupToken {
	
	public ElementDefinition_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_StyleclassAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// 'styleclass'
protected class ElementDefinition_StyleclassKeyword_4_0 extends KeywordToken  {
	
	public ElementDefinition_StyleclassKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getStyleclassKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_Group_3(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_NameAssignment_2(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// styleclass=ID
protected class ElementDefinition_StyleclassAssignment_4_1 extends AssignmentToken  {
	
	public ElementDefinition_StyleclassAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getStyleclassAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_StyleclassKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("styleclass",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("styleclass");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getElementDefinitionAccess().getStyleclassIDTerminalRuleCall_4_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getElementDefinitionAccess().getStyleclassIDTerminalRuleCall_4_1_0();
			return obj;
		}
		return null;
	}

}


// '{'
protected class ElementDefinition_LeftCurlyBracketKeyword_5 extends KeywordToken  {
	
	public ElementDefinition_LeftCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getLeftCurlyBracketKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_Group_3(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ElementDefinition_NameAssignment_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// (properties+=PropertyDefinition | pseudoClasses+=PseudoClassDefinition | substructures+=Substructure)*
protected class ElementDefinition_Alternatives_6 extends AlternativesToken {

	public ElementDefinition_Alternatives_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getAlternatives_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_PropertiesAssignment_6_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_PseudoClassesAssignment_6_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new ElementDefinition_SubstructuresAssignment_6_2(lastRuleCallOrigin, this, 2, inst);
			default: return null;
		}	
	}

}

// properties+=PropertyDefinition
protected class ElementDefinition_PropertiesAssignment_6_0 extends AssignmentToken  {
	
	public ElementDefinition_PropertiesAssignment_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getPropertiesAssignment_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("properties",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("properties");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPropertyDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getElementDefinitionAccess().getPropertiesPropertyDefinitionParserRuleCall_6_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ElementDefinition_Alternatives_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ElementDefinition_LeftCurlyBracketKeyword_5(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// pseudoClasses+=PseudoClassDefinition
protected class ElementDefinition_PseudoClassesAssignment_6_1 extends AssignmentToken  {
	
	public ElementDefinition_PseudoClassesAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getPseudoClassesAssignment_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PseudoClassDefinition_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("pseudoClasses",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("pseudoClasses");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getPseudoClassDefinitionRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getElementDefinitionAccess().getPseudoClassesPseudoClassDefinitionParserRuleCall_6_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ElementDefinition_Alternatives_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ElementDefinition_LeftCurlyBracketKeyword_5(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// substructures+=Substructure
protected class ElementDefinition_SubstructuresAssignment_6_2 extends AssignmentToken  {
	
	public ElementDefinition_SubstructuresAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getSubstructuresAssignment_6_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Substructure_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("substructures",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("substructures");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubstructureRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getElementDefinitionAccess().getSubstructuresSubstructureParserRuleCall_6_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new ElementDefinition_Alternatives_6(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new ElementDefinition_LeftCurlyBracketKeyword_5(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// '}'
protected class ElementDefinition_RightCurlyBracketKeyword_7 extends KeywordToken  {
	
	public ElementDefinition_RightCurlyBracketKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getElementDefinitionAccess().getRightCurlyBracketKeyword_7();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new ElementDefinition_Alternatives_6(lastRuleCallOrigin, this, 0, inst);
			case 1: return new ElementDefinition_LeftCurlyBracketKeyword_5(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule ElementDefinition ****************/


/************ begin Rule PropertyDefinition ****************
 *
 * PropertyDefinition Definition:
 * 	{PropertyDefinition} doku=Doku?
 * 	name=QualifiedName rule=CSSRuleOr ('default:' default=CSSDefaultValue)? ';';
 *
 **/

// {PropertyDefinition} doku=Doku? name=QualifiedName rule=CSSRuleOr ('default:' default=CSSDefaultValue)? ';'
protected class PropertyDefinition_Group extends GroupToken {
	
	public PropertyDefinition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyDefinition_SemicolonKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPropertyDefinitionAccess().getPropertyDefinitionAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {PropertyDefinition}
protected class PropertyDefinition_PropertyDefinitionAction_0 extends ActionToken  {

	public PropertyDefinition_PropertyDefinitionAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getPropertyDefinitionAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// doku=Doku?
protected class PropertyDefinition_DokuAssignment_1 extends AssignmentToken  {
	
	public PropertyDefinition_DokuAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getDokuAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPropertyDefinitionAccess().getDokuDokuParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PropertyDefinition_PropertyDefinitionAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// name=QualifiedName
protected class PropertyDefinition_NameAssignment_2 extends AssignmentToken  {
	
	public PropertyDefinition_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyDefinition_DokuAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyDefinition_PropertyDefinitionAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPropertyDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getPropertyDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// rule=CSSRuleOr
protected class PropertyDefinition_RuleAssignment_3 extends AssignmentToken  {
	
	public PropertyDefinition_RuleAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getRuleAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rule",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rule");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleOrRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPropertyDefinitionAccess().getRuleCSSRuleOrParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PropertyDefinition_NameAssignment_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ('default:' default=CSSDefaultValue)?
protected class PropertyDefinition_Group_4 extends GroupToken {
	
	public PropertyDefinition_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyDefinition_DefaultAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// 'default:'
protected class PropertyDefinition_DefaultKeyword_4_0 extends KeywordToken  {
	
	public PropertyDefinition_DefaultKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getDefaultKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyDefinition_RuleAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// default=CSSDefaultValue
protected class PropertyDefinition_DefaultAssignment_4_1 extends AssignmentToken  {
	
	public PropertyDefinition_DefaultAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getDefaultAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSDefaultValue_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("default",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("default");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSDefaultValueRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPropertyDefinitionAccess().getDefaultCSSDefaultValueParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PropertyDefinition_DefaultKeyword_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ';'
protected class PropertyDefinition_SemicolonKeyword_5 extends KeywordToken  {
	
	public PropertyDefinition_SemicolonKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getPropertyDefinitionAccess().getSemicolonKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PropertyDefinition_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PropertyDefinition_RuleAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}


/************ end Rule PropertyDefinition ****************/


/************ begin Rule PseudoClassDefinition ****************
 *
 * PseudoClassDefinition:
 * 	{PseudoClassDefinition} doku=Doku?
 * 	name=PSEUDO;
 *
 **/

// {PseudoClassDefinition} doku=Doku? name=PSEUDO
protected class PseudoClassDefinition_Group extends GroupToken {
	
	public PseudoClassDefinition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getPseudoClassDefinitionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PseudoClassDefinition_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getPseudoClassDefinitionAccess().getPseudoClassDefinitionAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {PseudoClassDefinition}
protected class PseudoClassDefinition_PseudoClassDefinitionAction_0 extends ActionToken  {

	public PseudoClassDefinition_PseudoClassDefinitionAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getPseudoClassDefinitionAccess().getPseudoClassDefinitionAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// doku=Doku?
protected class PseudoClassDefinition_DokuAssignment_1 extends AssignmentToken  {
	
	public PseudoClassDefinition_DokuAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPseudoClassDefinitionAccess().getDokuAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getPseudoClassDefinitionAccess().getDokuDokuParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new PseudoClassDefinition_PseudoClassDefinitionAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// name=PSEUDO
protected class PseudoClassDefinition_NameAssignment_2 extends AssignmentToken  {
	
	public PseudoClassDefinition_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getPseudoClassDefinitionAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new PseudoClassDefinition_DokuAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new PseudoClassDefinition_PseudoClassDefinitionAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPseudoClassDefinitionAccess().getNamePSEUDOTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getPseudoClassDefinitionAccess().getNamePSEUDOTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule PseudoClassDefinition ****************/


/************ begin Rule CSSRuleRef ****************
 *
 * CSSRuleRef hidden():
 * 	(doku=Doku WS*)? '<' ref=[Definition|QualifiedName] '>';
 *
 **/

// (doku=Doku WS*)? '<' ref=[Definition|QualifiedName] '>'
protected class CSSRuleRef_Group extends GroupToken {
	
	public CSSRuleRef_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleRefAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRef_GreaterThanSignKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// (doku=Doku WS*)?
protected class CSSRuleRef_Group_0 extends GroupToken {
	
	public CSSRuleRef_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleRefAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRef_DokuAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class CSSRuleRef_DokuAssignment_0_0 extends AssignmentToken  {
	
	public CSSRuleRef_DokuAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleRefAccess().getDokuAssignment_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleRefAccess().getDokuDokuParserRuleCall_0_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}


// '<'
protected class CSSRuleRef_LessThanSignKeyword_1 extends KeywordToken  {
	
	public CSSRuleRef_LessThanSignKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleRefAccess().getLessThanSignKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRef_Group_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// ref=[Definition|QualifiedName]
protected class CSSRuleRef_RefAssignment_2 extends AssignmentToken  {
	
	public CSSRuleRef_RefAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleRefAccess().getRefAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRef_LessThanSignKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("ref",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("ref");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleRefAccess().getRefDefinitionCrossReference_2_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getCSSRuleRefAccess().getRefDefinitionCrossReference_2_0(); 
				return obj;
			}
		}
		return null;
	}

}

// '>'
protected class CSSRuleRef_GreaterThanSignKeyword_3 extends KeywordToken  {
	
	public CSSRuleRef_GreaterThanSignKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleRefAccess().getGreaterThanSignKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRef_RefAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CSSRuleRef ****************/


/************ begin Rule CSSRuleDefinition ****************
 *
 * CSSRuleDefinition Definition hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	{CSSRuleDefinition} doku=Doku?
 * 	name=QualifiedName '=' (rule=CSSRuleOr | func=CSSRuleFunc) ';';
 *
 **/

// {CSSRuleDefinition} doku=Doku? name=QualifiedName '=' (rule=CSSRuleOr | func=CSSRuleFunc) ';'
protected class CSSRuleDefinition_Group extends GroupToken {
	
	public CSSRuleDefinition_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleDefinition_SemicolonKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleDefinitionAccess().getCSSRuleDefinitionAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleDefinition}
protected class CSSRuleDefinition_CSSRuleDefinitionAction_0 extends ActionToken  {

	public CSSRuleDefinition_CSSRuleDefinitionAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getCSSRuleDefinitionAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// doku=Doku?
protected class CSSRuleDefinition_DokuAssignment_1 extends AssignmentToken  {
	
	public CSSRuleDefinition_DokuAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getDokuAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleDefinitionAccess().getDokuDokuParserRuleCall_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleDefinition_CSSRuleDefinitionAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// name=QualifiedName
protected class CSSRuleDefinition_NameAssignment_2 extends AssignmentToken  {
	
	public CSSRuleDefinition_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleDefinition_DokuAssignment_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleDefinition_CSSRuleDefinitionAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRuleDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getCSSRuleDefinitionAccess().getNameQualifiedNameParserRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// '='
protected class CSSRuleDefinition_EqualsSignKeyword_3 extends KeywordToken  {
	
	public CSSRuleDefinition_EqualsSignKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getEqualsSignKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleDefinition_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// rule=CSSRuleOr | func=CSSRuleFunc
protected class CSSRuleDefinition_Alternatives_4 extends AlternativesToken {

	public CSSRuleDefinition_Alternatives_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getAlternatives_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleDefinition_RuleAssignment_4_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleDefinition_FuncAssignment_4_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// rule=CSSRuleOr
protected class CSSRuleDefinition_RuleAssignment_4_0 extends AssignmentToken  {
	
	public CSSRuleDefinition_RuleAssignment_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getRuleAssignment_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("rule",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("rule");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleOrRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleDefinitionAccess().getRuleCSSRuleOrParserRuleCall_4_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleDefinition_EqualsSignKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// func=CSSRuleFunc
protected class CSSRuleDefinition_FuncAssignment_4_1 extends AssignmentToken  {
	
	public CSSRuleDefinition_FuncAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getFuncAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleFunc_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("func",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("func");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleFuncRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleDefinitionAccess().getFuncCSSRuleFuncParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleDefinition_EqualsSignKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ';'
protected class CSSRuleDefinition_SemicolonKeyword_5 extends KeywordToken  {
	
	public CSSRuleDefinition_SemicolonKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleDefinitionAccess().getSemicolonKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleDefinition_Alternatives_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CSSRuleDefinition ****************/


/************ begin Rule CSSRuleFunc ****************
 *
 * CSSRuleFunc CSSRule hidden(ML_COMMENT, SL_COMMENT):
 * 	{CSSRuleFunc} name=ValidID '(' WS* params=CSSRuleOr ')';
 *
 **/

// {CSSRuleFunc} name=ValidID '(' WS* params=CSSRuleOr ')'
protected class CSSRuleFunc_Group extends GroupToken {
	
	public CSSRuleFunc_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleFuncAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleFunc_RightParenthesisKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleFuncAccess().getCSSRuleFuncAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleFunc}
protected class CSSRuleFunc_CSSRuleFuncAction_0 extends ActionToken  {

	public CSSRuleFunc_CSSRuleFuncAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleFuncAccess().getCSSRuleFuncAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// name=ValidID
protected class CSSRuleFunc_NameAssignment_1 extends AssignmentToken  {
	
	public CSSRuleFunc_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleFuncAccess().getNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleFunc_CSSRuleFuncAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRuleFuncAccess().getNameValidIDParserRuleCall_1_0(), value, null)) {
			type = AssignmentType.DATATYPE_RULE_CALL;
			element = grammarAccess.getCSSRuleFuncAccess().getNameValidIDParserRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// '('
protected class CSSRuleFunc_LeftParenthesisKeyword_2 extends KeywordToken  {
	
	public CSSRuleFunc_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleFuncAccess().getLeftParenthesisKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleFunc_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// params=CSSRuleOr
protected class CSSRuleFunc_ParamsAssignment_4 extends AssignmentToken  {
	
	public CSSRuleFunc_ParamsAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleFuncAccess().getParamsAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("params",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("params");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleOrRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleFuncAccess().getParamsCSSRuleOrParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleFunc_LeftParenthesisKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ')'
protected class CSSRuleFunc_RightParenthesisKeyword_5 extends KeywordToken  {
	
	public CSSRuleFunc_RightParenthesisKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleFuncAccess().getRightParenthesisKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleFunc_ParamsAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CSSRuleFunc ****************/


/************ begin Rule CSSRuleOr ****************
 *
 * CSSRuleOr CSSRule hidden(WS, ML_COMMENT, SL_COMMENT):
 * 	CSSRuleXor ({CSSRuleOr.ors+=current} ('|' ors+=CSSRuleXor)+)?;
 *
 **/

// CSSRuleXor ({CSSRuleOr.ors+=current} ('|' ors+=CSSRuleXor)+)?
protected class CSSRuleOr_Group extends GroupToken {
	
	public CSSRuleOr_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleOr_CSSRuleXorParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleOrAccess().getCSSRuleOrOrsAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleXorAccess().getCSSRuleXorXorsAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CSSRuleXor
protected class CSSRuleOr_CSSRuleXorParserRuleCall_0 extends RuleCallToken {
	
	public CSSRuleOr_CSSRuleXorParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getCSSRuleXorParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleXorAccess().getCSSRuleXorXorsAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleXor_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({CSSRuleOr.ors+=current} ('|' ors+=CSSRuleXor)+)?
protected class CSSRuleOr_Group_1 extends GroupToken {
	
	public CSSRuleOr_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleOrAccess().getCSSRuleOrOrsAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleOr.ors+=current}
protected class CSSRuleOr_CSSRuleOrOrsAction_1_0 extends ActionToken  {

	public CSSRuleOr_CSSRuleOrOrsAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getCSSRuleOrOrsAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_CSSRuleXorParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("ors", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("ors")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// ('|' ors+=CSSRuleXor)+
protected class CSSRuleOr_Group_1_1 extends GroupToken {
	
	public CSSRuleOr_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_OrsAssignment_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// '|'
protected class CSSRuleOr_VerticalLineKeyword_1_1_0 extends KeywordToken  {
	
	public CSSRuleOr_VerticalLineKeyword_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getVerticalLineKeyword_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleOr_CSSRuleOrOrsAction_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// ors+=CSSRuleXor
protected class CSSRuleOr_OrsAssignment_1_1_1 extends AssignmentToken  {
	
	public CSSRuleOr_OrsAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleOrAccess().getOrsAssignment_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("ors",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("ors");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleXorRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleOrAccess().getOrsCSSRuleXorParserRuleCall_1_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleOr_VerticalLineKeyword_1_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




/************ end Rule CSSRuleOr ****************/


/************ begin Rule CSSRuleXor ****************
 *
 * CSSRuleXor CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	CSSRuleConcat ({CSSRuleXor.xors+=current} ('||' xors+=CSSRuleConcat)+)?;
 *
 **/

// CSSRuleConcat ({CSSRuleXor.xors+=current} ('||' xors+=CSSRuleConcat)+)?
protected class CSSRuleXor_Group extends GroupToken {
	
	public CSSRuleXor_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleXor_CSSRuleConcatParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleXorAccess().getCSSRuleXorXorsAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CSSRuleConcat
protected class CSSRuleXor_CSSRuleConcatParserRuleCall_0 extends RuleCallToken {
	
	public CSSRuleXor_CSSRuleConcatParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getCSSRuleConcatParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcat_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleConcat_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({CSSRuleXor.xors+=current} ('||' xors+=CSSRuleConcat)+)?
protected class CSSRuleXor_Group_1 extends GroupToken {
	
	public CSSRuleXor_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleXorAccess().getCSSRuleXorXorsAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleXor.xors+=current}
protected class CSSRuleXor_CSSRuleXorXorsAction_1_0 extends ActionToken  {

	public CSSRuleXor_CSSRuleXorXorsAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getCSSRuleXorXorsAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_CSSRuleConcatParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("xors", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("xors")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// ('||' xors+=CSSRuleConcat)+
protected class CSSRuleXor_Group_1_1 extends GroupToken {
	
	public CSSRuleXor_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_XorsAssignment_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// '||'
protected class CSSRuleXor_VerticalLineVerticalLineKeyword_1_1_0 extends KeywordToken  {
	
	public CSSRuleXor_VerticalLineVerticalLineKeyword_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getVerticalLineVerticalLineKeyword_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleXor_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleXor_CSSRuleXorXorsAction_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// xors+=CSSRuleConcat
protected class CSSRuleXor_XorsAssignment_1_1_1 extends AssignmentToken  {
	
	public CSSRuleXor_XorsAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleXorAccess().getXorsAssignment_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcat_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("xors",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("xors");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleConcatRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleXorAccess().getXorsCSSRuleConcatParserRuleCall_1_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleXor_VerticalLineVerticalLineKeyword_1_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




/************ end Rule CSSRuleXor ****************/


/************ begin Rule CSSRuleConcat ****************
 *
 * CSSRuleConcat CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	CSSRuleConcatWithoutSpace ({CSSRuleConcat.conc+=current} conc+=CSSRuleConcatWithoutSpace+)?;
 *
 **/

// CSSRuleConcatWithoutSpace ({CSSRuleConcat.conc+=current} conc+=CSSRuleConcatWithoutSpace+)?
protected class CSSRuleConcat_Group extends GroupToken {
	
	public CSSRuleConcat_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleConcatAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcat_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleConcat_CSSRuleConcatWithoutSpaceParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CSSRuleConcatWithoutSpace
protected class CSSRuleConcat_CSSRuleConcatWithoutSpaceParserRuleCall_0 extends RuleCallToken {
	
	public CSSRuleConcat_CSSRuleConcatWithoutSpaceParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatWithoutSpaceParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleConcatWithoutSpace_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({CSSRuleConcat.conc+=current} conc+=CSSRuleConcatWithoutSpace+)?
protected class CSSRuleConcat_Group_1 extends GroupToken {
	
	public CSSRuleConcat_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleConcatAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcat_ConcAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleConcat.conc+=current}
protected class CSSRuleConcat_CSSRuleConcatConcAction_1_0 extends ActionToken  {

	public CSSRuleConcat_CSSRuleConcatConcAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleConcatAccess().getCSSRuleConcatConcAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcat_CSSRuleConcatWithoutSpaceParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("conc", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("conc")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// conc+=CSSRuleConcatWithoutSpace+
protected class CSSRuleConcat_ConcAssignment_1_1 extends AssignmentToken  {
	
	public CSSRuleConcat_ConcAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleConcatAccess().getConcAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("conc",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("conc");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleConcatWithoutSpaceRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleConcatAccess().getConcCSSRuleConcatWithoutSpaceParserRuleCall_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleConcat_ConcAssignment_1_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new CSSRuleConcat_CSSRuleConcatConcAction_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}



/************ end Rule CSSRuleConcat ****************/


/************ begin Rule CSSRuleConcatWithoutSpace ****************
 *
 * CSSRuleConcatWithoutSpace CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	CSSRulePostfix ({CSSRuleConcatWithoutSpace.conc+=current} ('~' conc+=CSSRulePostfix)+)?;
 *
 **/

// CSSRulePostfix ({CSSRuleConcatWithoutSpace.conc+=current} ('~' conc+=CSSRulePostfix)+)?
protected class CSSRuleConcatWithoutSpace_Group extends GroupToken {
	
	public CSSRuleConcatWithoutSpace_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleConcatWithoutSpace_CSSRulePostfixParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CSSRulePostfix
protected class CSSRuleConcatWithoutSpace_CSSRulePostfixParserRuleCall_0 extends RuleCallToken {
	
	public CSSRuleConcatWithoutSpace_CSSRulePostfixParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRulePostfixParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePostfix_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRulePostfix_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({CSSRuleConcatWithoutSpace.conc+=current} ('~' conc+=CSSRulePostfix)+)?
protected class CSSRuleConcatWithoutSpace_Group_1 extends GroupToken {
	
	public CSSRuleConcatWithoutSpace_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleConcatWithoutSpace.conc+=current}
protected class CSSRuleConcatWithoutSpace_CSSRuleConcatWithoutSpaceConcAction_1_0 extends ActionToken  {

	public CSSRuleConcatWithoutSpace_CSSRuleConcatWithoutSpaceConcAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getCSSRuleConcatWithoutSpaceConcAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_CSSRulePostfixParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("conc", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("conc")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// ('~' conc+=CSSRulePostfix)+
protected class CSSRuleConcatWithoutSpace_Group_1_1 extends GroupToken {
	
	public CSSRuleConcatWithoutSpace_Group_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getGroup_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_ConcAssignment_1_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// '~'
protected class CSSRuleConcatWithoutSpace_TildeKeyword_1_1_0 extends KeywordToken  {
	
	public CSSRuleConcatWithoutSpace_TildeKeyword_1_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getTildeKeyword_1_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_Group_1_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleConcatWithoutSpace_CSSRuleConcatWithoutSpaceConcAction_1_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

}

// conc+=CSSRulePostfix
protected class CSSRuleConcatWithoutSpace_ConcAssignment_1_1_1 extends AssignmentToken  {
	
	public CSSRuleConcatWithoutSpace_ConcAssignment_1_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getConcAssignment_1_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePostfix_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("conc",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("conc");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRulePostfixRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleConcatWithoutSpaceAccess().getConcCSSRulePostfixParserRuleCall_1_1_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleConcatWithoutSpace_TildeKeyword_1_1_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}




/************ end Rule CSSRuleConcatWithoutSpace ****************/


/************ begin Rule CSSRulePostfix ****************
 *
 * CSSRulePostfix CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	CSSRulePrimary ({CSSRulePostfix.rule=current} cardinality=('*' | '+' | '?'))?;
 *
 **/

// CSSRulePrimary ({CSSRulePostfix.rule=current} cardinality=('*' | '+' | '?'))?
protected class CSSRulePostfix_Group extends GroupToken {
	
	public CSSRulePostfix_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRulePostfixAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePostfix_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRulePostfix_CSSRulePrimaryParserRuleCall_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CSSRulePrimary
protected class CSSRulePostfix_CSSRulePrimaryParserRuleCall_0 extends RuleCallToken {
	
	public CSSRulePostfix_CSSRulePrimaryParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePostfixAccess().getCSSRulePrimaryParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePrimary_Alternatives(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRulePrimary_Alternatives.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// ({CSSRulePostfix.rule=current} cardinality=('*' | '+' | '?'))?
protected class CSSRulePostfix_Group_1 extends GroupToken {
	
	public CSSRulePostfix_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRulePostfixAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePostfix_CardinalityAssignment_1_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRulePostfix.rule=current}
protected class CSSRulePostfix_CSSRulePostfixRuleAction_1_0 extends ActionToken  {

	public CSSRulePostfix_CSSRulePostfixRuleAction_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRulePostfixAccess().getCSSRulePostfixRuleAction_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePostfix_CSSRulePrimaryParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		Object val = eObjectConsumer.getConsumable("rule", false);
		if(val == null) return null;
		if(!eObjectConsumer.isConsumedWithLastConsumtion("rule")) return null;
		return createEObjectConsumer((EObject) val);
	}
}

// cardinality=('*' | '+' | '?')
protected class CSSRulePostfix_CardinalityAssignment_1_1 extends AssignmentToken  {
	
	public CSSRulePostfix_CardinalityAssignment_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRulePostfixAccess().getCardinalityAssignment_1_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePostfix_CSSRulePostfixRuleAction_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("cardinality",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("cardinality");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRulePostfixAccess().getCardinalityAsteriskKeyword_1_1_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSRulePostfixAccess().getCardinalityAsteriskKeyword_1_1_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRulePostfixAccess().getCardinalityPlusSignKeyword_1_1_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSRulePostfixAccess().getCardinalityPlusSignKeyword_1_1_0_1();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRulePostfixAccess().getCardinalityQuestionMarkKeyword_1_1_0_2(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSRulePostfixAccess().getCardinalityQuestionMarkKeyword_1_1_0_2();
			return obj;
		}
		return null;
	}

}



/************ end Rule CSSRulePostfix ****************/


/************ begin Rule CSSRuleBracket ****************
 *
 * CSSRuleBracket CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	{CSSRuleBracket} '[' inner=CSSRuleOr ']';
 *
 **/

// {CSSRuleBracket} '[' inner=CSSRuleOr ']'
protected class CSSRuleBracket_Group extends GroupToken {
	
	public CSSRuleBracket_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleBracketAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleBracket_RightSquareBracketKeyword_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleBracket}
protected class CSSRuleBracket_CSSRuleBracketAction_0 extends ActionToken  {

	public CSSRuleBracket_CSSRuleBracketAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// '['
protected class CSSRuleBracket_LeftSquareBracketKeyword_1 extends KeywordToken  {
	
	public CSSRuleBracket_LeftSquareBracketKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleBracketAccess().getLeftSquareBracketKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleBracket_CSSRuleBracketAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// inner=CSSRuleOr
protected class CSSRuleBracket_InnerAssignment_2 extends AssignmentToken  {
	
	public CSSRuleBracket_InnerAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleBracketAccess().getInnerAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleOr_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("inner",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("inner");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleOrRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleBracketAccess().getInnerCSSRuleOrParserRuleCall_2_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleBracket_LeftSquareBracketKeyword_1(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ']'
protected class CSSRuleBracket_RightSquareBracketKeyword_3 extends KeywordToken  {
	
	public CSSRuleBracket_RightSquareBracketKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getCSSRuleBracketAccess().getRightSquareBracketKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleBracket_InnerAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule CSSRuleBracket ****************/


/************ begin Rule CSSRulePrimary ****************
 *
 * //CSSRuleParenthesis returns CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * //	{CSSRuleParanthesis} '(' inner=CSSRuleOr ')'
 * //;
 * CSSRulePrimary CSSRule hidden(SL_COMMENT, ML_COMMENT):
 * 	CSSRuleRef | CSSRuleBracket | CSSRuleLiteral | CSSRuleSymbol | CSSBaseType | CSSRuleRegex | {CSSNumLiteral} value=INT;
 *
 **/

// CSSRuleRef | CSSRuleBracket | CSSRuleLiteral | CSSRuleSymbol | CSSBaseType | CSSRuleRegex | {CSSNumLiteral} value=INT
protected class CSSRulePrimary_Alternatives extends AlternativesToken {

	public CSSRulePrimary_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePrimary_CSSRuleRefParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRulePrimary_CSSRuleBracketParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CSSRulePrimary_CSSRuleLiteralParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new CSSRulePrimary_CSSRuleSymbolParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
			case 4: return new CSSRulePrimary_CSSBaseTypeParserRuleCall_4(lastRuleCallOrigin, this, 4, inst);
			case 5: return new CSSRulePrimary_CSSRuleRegexParserRuleCall_5(lastRuleCallOrigin, this, 5, inst);
			case 6: return new CSSRulePrimary_Group_6(lastRuleCallOrigin, this, 6, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// CSSRuleRef
protected class CSSRulePrimary_CSSRuleRefParserRuleCall_0 extends RuleCallToken {
	
	public CSSRulePrimary_CSSRuleRefParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSRuleRefParserRuleCall_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRef_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleRefRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleRef_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CSSRuleBracket
protected class CSSRulePrimary_CSSRuleBracketParserRuleCall_1 extends RuleCallToken {
	
	public CSSRulePrimary_CSSRuleBracketParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSRuleBracketParserRuleCall_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleBracket_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleBracketAccess().getCSSRuleBracketAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleBracket_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// //	CSSRuleParenthesis |
// CSSRuleLiteral
protected class CSSRulePrimary_CSSRuleLiteralParserRuleCall_2 extends RuleCallToken {
	
	public CSSRulePrimary_CSSRuleLiteralParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSRuleLiteralParserRuleCall_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleLiteral_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleLiteral_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CSSRuleSymbol
protected class CSSRulePrimary_CSSRuleSymbolParserRuleCall_3 extends RuleCallToken {
	
	public CSSRulePrimary_CSSRuleSymbolParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSRuleSymbolParserRuleCall_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleSymbol_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleSymbol_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CSSBaseType
protected class CSSRulePrimary_CSSBaseTypeParserRuleCall_4 extends RuleCallToken {
	
	public CSSRulePrimary_CSSBaseTypeParserRuleCall_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSBaseTypeParserRuleCall_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSBaseType_CSSTypeParserRuleCall(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedDoubleTypeAction_1_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeAccess().getCSSRangedIntTypeAction_0_0().getType().getClassifier() && 
		   getEObject().eClass() != grammarAccess.getCSSTypeRule().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSBaseType_CSSTypeParserRuleCall.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// CSSRuleRegex
protected class CSSRulePrimary_CSSRuleRegexParserRuleCall_5 extends RuleCallToken {
	
	public CSSRulePrimary_CSSRuleRegexParserRuleCall_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public RuleCall getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSRuleRegexParserRuleCall_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRegex_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier())
			return null;
		if(checkForRecursion(CSSRuleRegex_Group.class, eObjectConsumer)) return null;
		return eObjectConsumer;
	}
	
    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
		}	
	}	
}

// {CSSNumLiteral} value=INT
protected class CSSRulePrimary_Group_6 extends GroupToken {
	
	public CSSRulePrimary_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getGroup_6();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePrimary_ValueAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSNumLiteral}
protected class CSSRulePrimary_CSSNumLiteralAction_6_0 extends ActionToken  {

	public CSSRulePrimary_CSSNumLiteralAction_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getCSSNumLiteralAction_6_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// value=INT
protected class CSSRulePrimary_ValueAssignment_6_1 extends AssignmentToken  {
	
	public CSSRulePrimary_ValueAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRulePrimaryAccess().getValueAssignment_6_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRulePrimary_CSSNumLiteralAction_6_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("value",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRulePrimaryAccess().getValueINTTerminalRuleCall_6_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSRulePrimaryAccess().getValueINTTerminalRuleCall_6_1_0();
			return obj;
		}
		return null;
	}

}



/************ end Rule CSSRulePrimary ****************/


/************ begin Rule CSSRuleRegex ****************
 *
 * CSSRuleRegex CSSRule hidden(WS, SL_COMMENT, ML_COMMENT):
 * 	{CSSRuleRegex} regex=REGEX;
 *
 **/

// {CSSRuleRegex} regex=REGEX
protected class CSSRuleRegex_Group extends GroupToken {
	
	public CSSRuleRegex_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleRegexAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRegex_RegexAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleRegex}
protected class CSSRuleRegex_CSSRuleRegexAction_0 extends ActionToken  {

	public CSSRuleRegex_CSSRuleRegexAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleRegexAccess().getCSSRuleRegexAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// regex=REGEX
protected class CSSRuleRegex_RegexAssignment_1 extends AssignmentToken  {
	
	public CSSRuleRegex_RegexAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleRegexAccess().getRegexAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleRegex_CSSRuleRegexAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("regex",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("regex");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRuleRegexAccess().getRegexREGEXTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSRuleRegexAccess().getRegexREGEXTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule CSSRuleRegex ****************/


/************ begin Rule CSSRuleLiteral ****************
 *
 * CSSRuleLiteral CSSRule:
 * 	{CSSRuleLiteral} (doku=Doku WS*)? value=ID;
 *
 **/

// {CSSRuleLiteral} (doku=Doku WS*)? value=ID
protected class CSSRuleLiteral_Group extends GroupToken {
	
	public CSSRuleLiteral_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleLiteralAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleLiteral_ValueAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleLiteral}
protected class CSSRuleLiteral_CSSRuleLiteralAction_0 extends ActionToken  {

	public CSSRuleLiteral_CSSRuleLiteralAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleLiteralAccess().getCSSRuleLiteralAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (doku=Doku WS*)?
protected class CSSRuleLiteral_Group_1 extends GroupToken {
	
	public CSSRuleLiteral_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleLiteralAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleLiteral_DokuAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class CSSRuleLiteral_DokuAssignment_1_0 extends AssignmentToken  {
	
	public CSSRuleLiteral_DokuAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleLiteralAccess().getDokuAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleLiteralAccess().getDokuDokuParserRuleCall_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleLiteral_CSSRuleLiteralAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// value=ID
protected class CSSRuleLiteral_ValueAssignment_2 extends AssignmentToken  {
	
	public CSSRuleLiteral_ValueAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleLiteralAccess().getValueAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleLiteral_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleLiteral_CSSRuleLiteralAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("value",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("value");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRuleLiteralAccess().getValueIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSRuleLiteralAccess().getValueIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule CSSRuleLiteral ****************/


/************ begin Rule CSSRuleSymbol ****************
 *
 * CSSRuleSymbol CSSRule:
 * 	{CSSRuleSymbol} (doku=Doku WS*)? symbol=(',' | '%');
 *
 **/

// {CSSRuleSymbol} (doku=Doku WS*)? symbol=(',' | '%')
protected class CSSRuleSymbol_Group extends GroupToken {
	
	public CSSRuleSymbol_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleSymbolAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleSymbol_SymbolAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSRuleSymbol}
protected class CSSRuleSymbol_CSSRuleSymbolAction_0 extends ActionToken  {

	public CSSRuleSymbol_CSSRuleSymbolAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSRuleSymbolAccess().getCSSRuleSymbolAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// (doku=Doku WS*)?
protected class CSSRuleSymbol_Group_1 extends GroupToken {
	
	public CSSRuleSymbol_Group_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSRuleSymbolAccess().getGroup_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleSymbol_DokuAssignment_1_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// doku=Doku
protected class CSSRuleSymbol_DokuAssignment_1_0 extends AssignmentToken  {
	
	public CSSRuleSymbol_DokuAssignment_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleSymbolAccess().getDokuAssignment_1_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSRuleSymbolAccess().getDokuDokuParserRuleCall_1_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSRuleSymbol_CSSRuleSymbolAction_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// symbol=(',' | '%')
protected class CSSRuleSymbol_SymbolAssignment_2 extends AssignmentToken  {
	
	public CSSRuleSymbol_SymbolAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSRuleSymbolAccess().getSymbolAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleSymbol_Group_1(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSRuleSymbol_CSSRuleSymbolAction_0(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("symbol",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("symbol");
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRuleSymbolAccess().getSymbolCommaKeyword_2_0_0(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSRuleSymbolAccess().getSymbolCommaKeyword_2_0_0();
			return obj;
		}
		if(keywordSerializer.isValid(obj.getEObject(), grammarAccess.getCSSRuleSymbolAccess().getSymbolPercentSignKeyword_2_0_1(), value, null)) {
			type = AssignmentType.KEYWORD;
			element = grammarAccess.getCSSRuleSymbolAccess().getSymbolPercentSignKeyword_2_0_1();
			return obj;
		}
		return null;
	}

}


/************ end Rule CSSRuleSymbol ****************/


/************ begin Rule CSSDefaultValue ****************
 *
 * CSSDefaultValue:
 * 	{CSSDefaultValue} val=CSSRuleLiteral | ival=INT | dval=DOUBLE | sval=STRING;
 *
 **/

// {CSSDefaultValue} val=CSSRuleLiteral | ival=INT | dval=DOUBLE | sval=STRING
protected class CSSDefaultValue_Alternatives extends AlternativesToken {

	public CSSDefaultValue_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Alternatives getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getAlternatives();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSDefaultValue_Group_0(lastRuleCallOrigin, this, 0, inst);
			case 1: return new CSSDefaultValue_IvalAssignment_1(lastRuleCallOrigin, this, 1, inst);
			case 2: return new CSSDefaultValue_DvalAssignment_2(lastRuleCallOrigin, this, 2, inst);
			case 3: return new CSSDefaultValue_SvalAssignment_3(lastRuleCallOrigin, this, 3, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getCSSDefaultValueRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {CSSDefaultValue} val=CSSRuleLiteral
protected class CSSDefaultValue_Group_0 extends GroupToken {
	
	public CSSDefaultValue_Group_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getGroup_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSDefaultValue_ValAssignment_0_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// {CSSDefaultValue}
protected class CSSDefaultValue_CSSDefaultValueAction_0_0 extends ActionToken  {

	public CSSDefaultValue_CSSDefaultValueAction_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getCSSDefaultValueAction_0_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// val=CSSRuleLiteral
protected class CSSDefaultValue_ValAssignment_0_1 extends AssignmentToken  {
	
	public CSSDefaultValue_ValAssignment_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getValAssignment_0_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new CSSRuleLiteral_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("val",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("val");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getCSSRuleLiteralRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getCSSDefaultValueAccess().getValCSSRuleLiteralParserRuleCall_0_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new CSSDefaultValue_CSSDefaultValueAction_0_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}


// ival=INT
protected class CSSDefaultValue_IvalAssignment_1 extends AssignmentToken  {
	
	public CSSDefaultValue_IvalAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getIvalAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("ival",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("ival");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSDefaultValueAccess().getIvalINTTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSDefaultValueAccess().getIvalINTTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// dval=DOUBLE
protected class CSSDefaultValue_DvalAssignment_2 extends AssignmentToken  {
	
	public CSSDefaultValue_DvalAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getDvalAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("dval",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dval");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSDefaultValueAccess().getDvalDOUBLETerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSDefaultValueAccess().getDvalDOUBLETerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// sval=STRING
protected class CSSDefaultValue_SvalAssignment_3 extends AssignmentToken  {
	
	public CSSDefaultValue_SvalAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getCSSDefaultValueAccess().getSvalAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("sval",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("sval");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCSSDefaultValueAccess().getSvalSTRINGTerminalRuleCall_3_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getCSSDefaultValueAccess().getSvalSTRINGTerminalRuleCall_3_0();
			return obj;
		}
		return null;
	}

}


/************ end Rule CSSDefaultValue ****************/


/************ begin Rule SubstructureSelector ****************
 *
 * SubstructureSelector hidden():
 * 	{SubstructureSelector} selectorName=ID ('[' var=ID ']')?;
 *
 **/

// {SubstructureSelector} selectorName=ID ('[' var=ID ']')?
protected class SubstructureSelector_Group extends GroupToken {
	
	public SubstructureSelector_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_Group_2(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SubstructureSelector_SelectorNameAssignment_1(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSubstructureSelectorAccess().getSubstructureSelectorAction_0().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// {SubstructureSelector}
protected class SubstructureSelector_SubstructureSelectorAction_0 extends ActionToken  {

	public SubstructureSelector_SubstructureSelectorAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Action getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getSubstructureSelectorAction_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(!eObjectConsumer.isConsumed()) return null;
		return eObjectConsumer;
	}
}

// selectorName=ID
protected class SubstructureSelector_SelectorNameAssignment_1 extends AssignmentToken  {
	
	public SubstructureSelector_SelectorNameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getSelectorNameAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_SubstructureSelectorAction_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("selectorName",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("selectorName");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSubstructureSelectorAccess().getSelectorNameIDTerminalRuleCall_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSubstructureSelectorAccess().getSelectorNameIDTerminalRuleCall_1_0();
			return obj;
		}
		return null;
	}

}

// ('[' var=ID ']')?
protected class SubstructureSelector_Group_2 extends GroupToken {
	
	public SubstructureSelector_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getGroup_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_RightSquareBracketKeyword_2_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// '['
protected class SubstructureSelector_LeftSquareBracketKeyword_2_0 extends KeywordToken  {
	
	public SubstructureSelector_LeftSquareBracketKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getLeftSquareBracketKeyword_2_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_SelectorNameAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// var=ID
protected class SubstructureSelector_VarAssignment_2_1 extends AssignmentToken  {
	
	public SubstructureSelector_VarAssignment_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getVarAssignment_2_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_LeftSquareBracketKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("var",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("var");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSubstructureSelectorAccess().getVarIDTerminalRuleCall_2_1_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSubstructureSelectorAccess().getVarIDTerminalRuleCall_2_1_0();
			return obj;
		}
		return null;
	}

}

// ']'
protected class SubstructureSelector_RightSquareBracketKeyword_2_2 extends KeywordToken  {
	
	public SubstructureSelector_RightSquareBracketKeyword_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureSelectorAccess().getRightSquareBracketKeyword_2_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_VarAssignment_2_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule SubstructureSelector ****************/


/************ begin Rule Substructure ****************
 *
 * Substructure:
 * 	doku=Doku?
 * 	'substructure' name=ID '{'
 * 	childs+=SubstructureStyleclass+
 * 	'}';
 *
 **/

// doku=Doku? 'substructure' name=ID '{' childs+=SubstructureStyleclass+ '}'
protected class Substructure_Group extends GroupToken {
	
	public Substructure_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Substructure_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSubstructureRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// doku=Doku?
protected class Substructure_DokuAssignment_0 extends AssignmentToken  {
	
	public Substructure_DokuAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getDokuAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubstructureAccess().getDokuDokuParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// 'substructure'
protected class Substructure_SubstructureKeyword_1 extends KeywordToken  {
	
	public Substructure_SubstructureKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getSubstructureKeyword_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Substructure_DokuAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

}

// name=ID
protected class Substructure_NameAssignment_2 extends AssignmentToken  {
	
	public Substructure_NameAssignment_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getNameAssignment_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Substructure_SubstructureKeyword_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSubstructureAccess().getNameIDTerminalRuleCall_2_0(), value, null)) {
			type = AssignmentType.TERMINAL_RULE_CALL;
			element = grammarAccess.getSubstructureAccess().getNameIDTerminalRuleCall_2_0();
			return obj;
		}
		return null;
	}

}

// '{'
protected class Substructure_LeftCurlyBracketKeyword_3 extends KeywordToken  {
	
	public Substructure_LeftCurlyBracketKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getLeftCurlyBracketKeyword_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Substructure_NameAssignment_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// childs+=SubstructureStyleclass+
protected class Substructure_ChildsAssignment_4 extends AssignmentToken  {
	
	public Substructure_ChildsAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getChildsAssignment_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("childs",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("childs");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubstructureStyleclassRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubstructureAccess().getChildsSubstructureStyleclassParserRuleCall_4_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new Substructure_ChildsAssignment_4(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new Substructure_LeftCurlyBracketKeyword_3(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// '}'
protected class Substructure_RightCurlyBracketKeyword_5 extends KeywordToken  {
	
	public Substructure_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureAccess().getRightCurlyBracketKeyword_5();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Substructure_ChildsAssignment_4(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}


/************ end Rule Substructure ****************/


/************ begin Rule SubstructureStyleclass ****************
 *
 * SubstructureStyleclass:
 * 	doku=Doku?
 * 	element=[ElementDefinition|QualifiedName] 'styleclass' selectors+=SubstructureSelector+ ('{'
 * 	childs+=SubstructureStyleclass+ '}')?;
 *
 **/

// doku=Doku? element=[ElementDefinition|QualifiedName] 'styleclass' selectors+=SubstructureSelector+ ('{'
// childs+=SubstructureStyleclass+ '}')?
protected class SubstructureStyleclass_Group extends GroupToken {
	
	public SubstructureStyleclass_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getGroup();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_Group_4(lastRuleCallOrigin, this, 0, inst);
			case 1: return new SubstructureStyleclass_SelectorsAssignment_3(lastRuleCallOrigin, this, 1, inst);
			default: return null;
		}	
	}

    @Override
	public IEObjectConsumer tryConsume() {
		if(getEObject().eClass() != grammarAccess.getSubstructureStyleclassRule().getType().getClassifier())
			return null;
		return eObjectConsumer;
	}

}

// doku=Doku?
protected class SubstructureStyleclass_DokuAssignment_0 extends AssignmentToken  {
	
	public SubstructureStyleclass_DokuAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getDokuAssignment_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new Doku_ContentAssignment(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("doku",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("doku");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getDokuRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubstructureStyleclassAccess().getDokuDokuParserRuleCall_0_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, consumed);
		}	
	}	
}

// element=[ElementDefinition|QualifiedName]
protected class SubstructureStyleclass_ElementAssignment_1 extends AssignmentToken  {
	
	public SubstructureStyleclass_ElementAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getElementAssignment_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_DokuAssignment_0(lastRuleCallOrigin, this, 0, inst);
			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index - 1, inst);
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("element",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("element");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubstructureStyleclassAccess().getElementElementDefinitionCrossReference_1_0().getType().getClassifier())) {
				type = AssignmentType.CROSS_REFERENCE;
				element = grammarAccess.getSubstructureStyleclassAccess().getElementElementDefinitionCrossReference_1_0(); 
				return obj;
			}
		}
		return null;
	}

}

// 'styleclass'
protected class SubstructureStyleclass_StyleclassKeyword_2 extends KeywordToken  {
	
	public SubstructureStyleclass_StyleclassKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getStyleclassKeyword_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_ElementAssignment_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// selectors+=SubstructureSelector+
protected class SubstructureStyleclass_SelectorsAssignment_3 extends AssignmentToken  {
	
	public SubstructureStyleclass_SelectorsAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getSelectorsAssignment_3();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureSelector_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("selectors",true)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("selectors");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubstructureSelectorRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubstructureStyleclassAccess().getSelectorsSubstructureSelectorParserRuleCall_3_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SubstructureStyleclass_SelectorsAssignment_3(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new SubstructureStyleclass_StyleclassKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// ('{' childs+=SubstructureStyleclass+ '}')?
protected class SubstructureStyleclass_Group_4 extends GroupToken {
	
	public SubstructureStyleclass_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Group getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getGroup_4();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_RightCurlyBracketKeyword_4_2(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// '{'
protected class SubstructureStyleclass_LeftCurlyBracketKeyword_4_0 extends KeywordToken  {
	
	public SubstructureStyleclass_LeftCurlyBracketKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getLeftCurlyBracketKeyword_4_0();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_SelectorsAssignment_3(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}

// childs+=SubstructureStyleclass+
protected class SubstructureStyleclass_ChildsAssignment_4_1 extends AssignmentToken  {
	
	public SubstructureStyleclass_ChildsAssignment_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Assignment getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getChildsAssignment_4_1();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_Group(this, this, 0, inst);
			default: return null;
		}	
	}

    @Override	
	public IEObjectConsumer tryConsume() {
		if((value = eObjectConsumer.getConsumable("childs",false)) == null) return null;
		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("childs");
		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
			IEObjectConsumer param = createEObjectConsumer((EObject)value);
			if(param.isInstanceOf(grammarAccess.getSubstructureStyleclassRule().getType().getClassifier())) {
				type = AssignmentType.PARSER_RULE_CALL;
				element = grammarAccess.getSubstructureStyleclassAccess().getChildsSubstructureStyleclassParserRuleCall_4_1_0(); 
				consumed = obj;
				return param;
			}
		}
		return null;
	}

    @Override
	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
		if(value == inst.getEObject() && !inst.isConsumed()) return null;
		switch(index) {
			case 0: return new SubstructureStyleclass_ChildsAssignment_4_1(lastRuleCallOrigin, next, actIndex, consumed);
			case 1: return new SubstructureStyleclass_LeftCurlyBracketKeyword_4_0(lastRuleCallOrigin, next, actIndex, consumed);
			default: return null;
		}	
	}	
}

// '}'
protected class SubstructureStyleclass_RightCurlyBracketKeyword_4_2 extends KeywordToken  {
	
	public SubstructureStyleclass_RightCurlyBracketKeyword_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
	}
	
	@Override
	public Keyword getGrammarElement() {
		return grammarAccess.getSubstructureStyleclassAccess().getRightCurlyBracketKeyword_4_2();
	}

    @Override
	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
		switch(index) {
			case 0: return new SubstructureStyleclass_ChildsAssignment_4_1(lastRuleCallOrigin, this, 0, inst);
			default: return null;
		}	
	}

}



/************ end Rule SubstructureStyleclass ****************/

}
